Visualização - Remuneração base

Análises semânticas

Autor

Joellen Silva

Data de Publicação

11.fev.2025

Data de Modificação

11.fev.2025

Código
library(tidyverse)
library(here)
library(gt)
library(ggiraph)
library(glue)
library(scales)
library(plotly)
library(dplyr)
library(zoo)
library(ggplot2)
library(crosstalk)
library(shiny)
library(shinylive)
options(scipen = 999)

source(here("tasks/view-remuneracao-base/src/00-plot-aesthetics.R"), encoding = "utf-8")

Resumo

Este relatório tem como objetivo analisar a soma das remunerações mensais de todos os membros por órgão, considerando apenas a remuneração básica, excluindo benefícios.

Principais resultados:

  • Tendências na Remuneração
    • Identificação de flutuações na remuneração mensal por órgão.
  • Comparação com Médias Móveis
    • Meses em que a remuneração superou a média móvel dos últimos três anos para o mesmo mês.
    • Meses em que a remuneração ultrapassou a média móvel dos últimos três meses.

Dados

Extração dos dados

Os dados foram agrupados utilizando a query: ./tasks/view-remuneracao-base/src/01-extracao.sql

Código
data <- readRDS(here(glue("tasks/view-remuneracao-base/outputs/extracao-{today()}.rds")))


df <- data %>%
  arrange(id_orgao, ano, mes) %>%
  mutate(ano_mes = sprintf("%d/%02d", ano, mes)) %>%
  group_by(id_orgao) %>%
  mutate(media_movel_3_meses = lag(rollapply(valor, width = 3, FUN = mean, fill = NA, align = "right"))) %>%
  group_by(mes) %>%
  mutate(media_movel_3_anos = lag(rollapply(valor, width = 3, FUN = mean, fill = NA, align = "right"))) %>%
  ungroup() %>%
  filter(id_orgao %in% c("cnj"))

Visualização Médias Móveis

Figura 1

Dica

📊 Gráfico interativo, use o mouse para ver detalhes dos dados.

Legenda:
  • 🟢 Média Móvel 3 Anos: Representa a média do mesmo mês nos 3 anos anteriores.
  • 🔴 Média Móvel 3 Meses: Representa a média dos 3 meses anteriores.
Código
grafico_mm <- ggplot(df, aes(x = ano_mes, y = valor, text = paste0("Ano/Mês: ", ano_mes, "<br>Valor: R$ ", scales::comma(valor, accuracy = 0.1), "<br>Média 3 meses: R$ ", scales::comma(media_movel_3_meses, accuracy = 0.1), "<br>Média 3 anos: R$ ", scales::comma(media_movel_3_anos, accuracy = 0.1)))) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_errorbar(aes(ymin = media_movel_3_anos, ymax = media_movel_3_anos, color = "Média Móvel 3 Anos", text = paste0("<br>Média 3 anos: R$ ", scales::comma(media_movel_3_anos, accuracy = 0.1))),
    width = 2.5, color = "green", linewidth = 1.2, na.rm = TRUE
  ) +
  geom_errorbar(aes(ymin = media_movel_3_meses, ymax = media_movel_3_meses, color = "Média Móvel 3 Meses", , text = paste0("<br>Média 3 meses: R$ ", scales::comma(media_movel_3_meses, accuracy = 0.1))),
    width = 2.5, color = "red", linewidth = 1.2, na.rm = TRUE
  ) +
  scale_color_manual(values = c("Média Móvel 3 Anos" = "green", "Média Móvel 3 Meses" = "red")) +
  labs(
    title = "Somatório Remuneração Base - Média Móvel 3 Anos e 3 Meses",
    x = "Ano/Mês", y = "Valor", color = "Legenda"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 8))

grafico_interativo_mm <- ggplotly(grafico_mm, tooltip = "text")

grafico_interativo_mm %>%
  layout(
    xaxis = list(
      tickmode = "array",
      tickvals = df$ano_mes,
      ticktext = df$ano_mes,
      rangeslider = list(visible = TRUE),
      range = c(length(df$ano_mes) - 11.5, length(df$ano_mes) + 0.5),
      tickangle = 90,
      showticklabels = TRUE
    ),
    yaxis = list(
      showgrid = TRUE
    ),
    dragmode = "pan",
    autosize = TRUE
  )
Figura 1: Gráfico Remuneração Base - Médias Móveis 3 Anos e 3 Meses

Tabela 1

Código
tabela <- df %>%
  filter(!is.na(media_movel_3_meses), !is.na(media_movel_3_anos)) %>%
  filter(valor > media_movel_3_meses | valor > media_movel_3_anos) %>%
  mutate(
    maior_que = case_when(
      valor > media_movel_3_meses & valor < media_movel_3_anos ~ "media_movel_3_meses",
      valor > media_movel_3_anos & valor < media_movel_3_meses ~ "media_movel_3_anos",
      valor > media_movel_3_meses & valor > media_movel_3_anos ~ "ambas"
    )
  )

tabela %>%
  summarise(
    ano = ano,
    mes = mes,
    somatoria = valor,
    maior_que = maior_que
  ) %>%
  arrange(-ano) %>%
  gt(groupname_col = "") %>%
  fmt_currency_brl(columns = somatoria) %>%
  tab_style(
    style = cell_text(size = pct(65)),
    locations = cells_body(columns = maior_que)
  ) %>%
  tab_style(
    style = cell_text(size = pct(75)),
    locations = cells_body(columns = maior_que)
  ) %>%
  tab_options(table.width = pct(100)) %>%
  opt_interactive(use_search = TRUE, use_highlight = TRUE)
Tabela 1: Meses que Ultrapassaram Médias Móveis